package cn.yudao.ymcc.service.impl;

import cn.yudao.ymcc.domain.CourseMarket;
import cn.yudao.ymcc.domain.CourseUserLearn;
import cn.yudao.ymcc.dto.AliPayNotifyMqDto;
import cn.yudao.ymcc.mapper.CourseUserLearnMapper;
import cn.yudao.ymcc.service.ICourseMarketService;
import cn.yudao.ymcc.service.ICourseUserLearnService;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.Date;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author whale.jia
 * @since 2022-08-07
 */
@Service
public class CourseUserLearnServiceImpl extends ServiceImpl<CourseUserLearnMapper, CourseUserLearn> implements ICourseUserLearnService {

    @Autowired
    private ICourseMarketService courseMarketService;

    /**
    * @Title: aliPaySaveOrUpCourseUserLearn
    * @Description: 支付宝的回调
    * @Author: Mr.Jia
    * @Version: 1.0
    * @Date:  2022/8/21 15:00
    * @Parameters:
    * @Return
    */
    @Override
    public void aliPaySaveOrUpCourseUserLearn(AliPayNotifyMqDto dto) {
        // 获取课程id
        String extParams = dto.getExtParams();
        Map map = JSONObject.parseObject(extParams, Map.class);
        // 获取课程-用户信息
        String userIdTem = map.get("userId").toString();
        Long userId = Long.valueOf(userIdTem);
        String courseIds = map.get("extParams").toString();
        String[] split = courseIds.split(",");
        Date now = new Date(); // 获取当前时间
        // 查询--有没有购买过当前课程
        Arrays.stream(split).forEach(courseId ->{
            // 根据当前用户的id和课程id查询用户是否购买过当前课程
            Wrapper<CourseUserLearn> wrapper = new EntityWrapper<>();
            wrapper.eq("login_id",userId).eq("course_id",courseId);
            CourseUserLearn courseUserLearn = selectOne(wrapper);
            // 查询当前课程的可看天书
            CourseMarket courseMarket = courseMarketService.selectById(courseId);
            if (courseUserLearn == null){
                // 新增
                courseUserLearn = new CourseUserLearn();
                courseUserLearn.setCreateTime(now); // 设置创建时间
                courseUserLearn.setCourseId(Long.valueOf(courseId)); // 设置课程id
                courseUserLearn.setLoginId(userId); // 用户id
                courseUserLearn.setStartTime(now); // 开始时间
                courseUserLearn.setCourseOrderNo(dto.getOrderNo()); // 订单号
                courseUserLearn.setState(CourseUserLearn.Buy_COURSE); // 表明已购买
                courseUserLearn.setEndTime(DateUtils.addDays(now,courseMarket.getValidDays())); // 修改过期时间
                // 新增数据库
                insert(courseUserLearn);
            }else {
                // 判断用户时间是否过期
                if (courseUserLearn.getState() == CourseUserLearn.Buy_COURSE){ // 没有过期
                    // 在当前时间上在加上课程的可看天数的时间 -- 过期时间
                    courseUserLearn.setEndTime(
                            DateUtils.addDays(courseUserLearn.getEndTime(),courseMarket.getValidDays())
                    );
                }else { // 过期了
                    // 修改过期时间
                    courseUserLearn.setEndTime(DateUtils.addDays(now,courseMarket.getValidDays()));
                    // 修改状态
                    courseUserLearn.setState(CourseUserLearn.Buy_COURSE); // 表明已购买使用
                }
                // 修改开始时间
                courseUserLearn.setStartTime(now); // 现在开始
                // 修改订单号为本次的订单号
                courseUserLearn.setCourseOrderNo(dto.getOrderNo());
                // 修改
                updateById(courseUserLearn);
            }
        });
    }
}
